package com.example.springboot.基础;

public class 自动配置 {
}
/**
 * 自动配置
 * ● 自动配好Tomcat
 *   ○ 引入Tomcat依赖。
 *   ○ 配置Tomcat
 * ● 自动配好SpringMVC
 *   ○ 引入SpringMVC全套组件
 *   ○ 自动配好SpringMVC常用组件（功能）
 * ● 自动配好Web常见功能，如：字符编码问题
 *   ○ SpringBoot帮我们配置好了所有web开发的常见场景
 * ● 默认的包结构
 *   ○ 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
 *   ○ 无需以前的包扫描配置
 *   ○ 想要改变扫描路径，
 *      @SpringBootApplication(scanBasePackages="com.atguigu")
 *     ■ 或者@ComponentScan 指定扫描路径
 *  @SpringBootApplication
 *  等同于
 *  @SpringBootConfiguration
 *  @EnableAutoConfiguration
 *  @ComponentScan("com.atguigu.boot")
 *
 * springboot
 * ● 各种配置拥有默认值
 *   ○ 默认配置最终都是映射到某个类上，如：MultipartProperties
 *   ○ 配置文件的值最终会绑定每个类上，这个类会在容器中创建对象
 * ● 按需加载所有自动配置项
 *   ○ 非常多的starter
 *   ○ 引入了哪些场景这个场景的自动配置才会开启
 *   ○ SpringBoot所有的自动配置功能都在
 *      spring-boot-autoconfigure 包里面
 *
 */
/**
 * 底层通过一系列方法 再通过
 * @EnableConfigurationProperties 配置绑定功能
 * 就是将xml配置文件可以在 application.properties 里配置
 * 在在底层new一个 DispatcherServlet (springMVC的启动类)
 * 将配置绑定的信息放入 DispatcherServlet 里(就不用配置xml了)
 * 内部还会给用户的配置  规范化
 *
 * SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先
 *
 * 总结：
 * ● SpringBoot先加载所有的自动配置类  XxxAutoConfiguration
 * ● 每个自动配置类按照条件进行生效，默认都会绑定配置文件指定的值。XxxProperties里面拿。
 *     XxxProperties和配置文件进行了绑定
 * ● 生效的配置类就会给容器中装配很多组件
 * ● 只要容器中有这些组件，相当于这些功能就有了
 * ● 定制化配置
 *   ○ 用户直接自己 @Bean 替换底层的组件
 *   ○ 用户去看这个组件是获取的配置文件什么值就去修改。
 *          XxxAutoConfiguration ---> 组件  ---> XxxProperties里面拿值
 *           ----> application.properties
 *
 *  XXXXXCustomizer//自定义器  为用户自定义弄得
 *
 */